perm filename BITS2[OLD,LCS] blob
sn#028052 filedate 1974-01-08 generic text, type T, neo UTF8
TITLE BITS ;DEB, 11/13/69
; ROUTINE WITH 3 ENTRY POINTS:
; CALL BITS (I)
; I=12 - 12-BIT SAMPLES
; I=18 - 18-BIT SAMPLES
; CALL UNPACK (IBOTT,NORM)
; IF I=12, MOVE 3 12-BIT BYTES INTO
; NORM(1),NORM(2),NORM(3) FROM IBOTT(1)
; IF I=18, MOVE 6 18-BIT BYTES INTO
; NORM(1)...NORM(6) FROM IBOTT(1)...IBOTT(3)
; CALL REPACK (IBOTT,NORM)
; IF I=12, PACK NORM(1),NORM(2),NORM(3) INTO
; 3 12-BIT BYTES OF IBOTT
; IF I=18, PACK NORM(1)...NORM(6) INTO
; 6 12-BIT BYTES OF IBOTT(1),IBOTT(2)
INTERNAL BITS,UNPACK,REPACK
X ← 2 ;LOOP AND INDEX
T ← 3 ;BASE OF IBOTT
BITS: 0
MOVE X,@0(16) ;PICK UP BIT SIZE
MOVE 1,[XWD 441400,-3] ;FOR 12-BIT BYTES
CAIE X,=12 ;IS IT 12⎇
MOVE 1,[XWD 442200,-6] ;FOR 18-BIT BYTES
MOVEM 1,IDX# ;SAVE IT FOR PACK ROUTINES
JRA 16,1(16) ;RETURN
UNPACK: 0
MOVE T,0(16) ;BASE OF IBOTT
HLL T,IDX ;MOVE BIT-SIZE INTO LEFT PART OF T
MOVE X,1(16) ;BASE OF NORM
HRL X,IDX ;SET UP LOOP AND INDEX FOR AOBJN
LOOP1:
ILDB 1,T ;PICK UP BYTE
LSH 1,=24 ;PROPAGATE SIGN
ASH 1,-=24 ;RIGHT SHIFT
MOVEM 1,(X) ;MOVE INTO NORM(I)
AOBJN X,LOOP1 ;CONTINUE (3 OR 6 TIMES)
JRA 16,2(16)
REPACK: 0
MOVE T,0(16) ;BASE OF IBOTT (DESTINATION)
HRLI T,441400 ;12-BIT BYTE SIZE
MOVE X,1(16) ;BASE OF NORM (SOURCE)
HRL X,IDX ;LOOP INDEX
LOOP2:
MOVE 1,(X) ;PICK UP NORM(I)
IDPB 1,T ;DEPOSIT IN 12 BITS OF IBOTT
AOBJN X,LOOP2 ;CONTINUE (3 OR 6 TIMES)
JRA 16,2(16)
END